package main

import (
	"fmt"
	"strconv"
	"strings"
)

/**
  字符串系统函数
*/
func main() {
	//统计字符串的长度，按字节 len(str)
	var a = "hello 世界"
	fmt.Println(len(a))
	//字符串遍历，同时处理有中文的问题 r := []rune(str)
	runes := []rune(a)
	fmt.Println(len(runes))
	//字符串转整数,可以根据第二个返回值检查有无异常
	var num = "111"
	n, err := strconv.Atoi(num)
	fmt.Println(n, err)
	//整数转字符串
	itoa := strconv.Itoa(n)
	fmt.Println(itoa)
	//字符串 转 []byte
	var bytes = []byte("hello")
	fmt.Println(bytes)
	//[]byte 转 字符串
	s := string([]byte{97, 98, 99})
	fmt.Println(s)
	//10 进制转 2, 8, 16 进制
	formatInt := strconv.FormatInt(121, 2)
	fmt.Println(formatInt)
	//查找子串是否在指定的字符串中
	contains := strings.Contains("123qw", "qw")
	fmt.Println(contains)
	//统计一个字符串有几个指定的子串
	count := strings.Count("wqeqweqwqwwqwq", "q")
	fmt.Println(count)
	//不区分大小写的字符串比较(==是区分字母大小写的)
	println(strings.EqualFold("ABC", "abc"))
	//返回子串在字符串第一次出现的 index 值，如果没有返回-1
	println(strings.Index("dsdsdsbfd", "bf"))
	//返回子串在字符串最后一次出现的 index
	println(strings.LastIndex("dsdwewedpo", "we"))
	//将指定的子串替换成 另外一个子串,n 可以指 定你希望替换几个，如果 n=-1 表示全部替换
	println(strings.Replace("asdfghtrrt", "rr", "PP", -1))
	//按照指定的某个字符,为分割标识,将一个字符串拆分成字符串数组
	split := strings.Split("h,e,l,l,o", ",")
	fmt.Printf("%v \n", split)
	//将字符串的字母进行大小写的转换
	println(strings.ToLower("FDFDFD"))
	println(strings.ToUpper("ddsds"))
	//将字符串左右两边的空格去掉
	println(strings.TrimSpace(" ABC "))
	//判断字符串是否以指定的字符串开头或结尾
	println(strings.HasPrefix("qwer", "q"))
	println(strings.HasSuffix("qwer", "r"))
}
